<?php
namespace controller;
require_once ('src/Model/BlogModel.php');
require_once ('src/View/BlogView.php');
require_once ('src/View/DateView.php');

class BlogController {
    private $loginModel;
    private $dateView;
    public $blogModel;              // skapar två public variabler och fyller dem då den anropas från applicationController
    public $blogView;


    /**
    * @param object \controller\ApplicationController $loginModel
    */
    public function __construct(\model\LoginModel $loginModel) {
        $this->loginModel = $loginModel;
        $this->blogModel = new \model\BlogModel();
        $this->blogView = new \view\BlogView($this->blogModel);		// skapar mitt object är än i blogController slipper man skicka blogView fram tillbaka om jag nu hade valt skapa den i ApplicationController
        $this->dateView = new \view\DateView();
    }


    /**
    * om användaren vill lägga till en blogpost så körs nedanstående kod
    */
    public function addBlogPost() {
        if ($this->blogView->hasNewBlogInput()) {
            $blogPost = $this->blogView->getNewBlogPostInput();
            $blogHeader=$blogPost[0];
            $blogText=$blogPost[1];
            $blogUser=$this->loginModel->userModel->returnValidUsername();
			$blogDate = $this->dateView->getCorrectDate();
            $type = $this->blogModel->applicationModel->m_newType;

            if ($this->validateBlogPost($type, $blogHeader, $blogText)) {
                $this->blogModel->addBlogToDatabase($blogHeader , $blogText, $blogDate, $blogUser) ;
            }
        }
    }


    /**
    * om användaren vill editera sin blogpost så körs nedanstående kod
    */
    public function editBlogPost() {
        if ($this->blogView->hasUpdatedBlogPostInput()) {
            $id=$this->blogView->returnBlogPostId();
            $updatedBlogPost = $this->blogView->getUpdatedBlogPostInput();
            $updatedBlogHeader=$updatedBlogPost[0];
            $updatedBlogText=$updatedBlogPost[1];
            $type = $this->blogModel->applicationModel->m_updateType;

            if ($this->validateBlogPost($type, $updatedBlogHeader, $updatedBlogText)) {
                $this->blogModel->updateBlogPostInDatabase($id, $updatedBlogHeader, $updatedBlogText) ;
            }
        }
    }


    /**
    * @param string \controller\BlogController $type
    * @param string \controller\BlogController $header
    * @param string \controller\BlogController $text
    * @return bolean
    *
    * här valideras blogposten mot modellens krav
    */
    public function validateBlogPost($type, $header, $text) {
        $isBlogOk = false;

        if ($this->blogModel->isBlogHeaderToShort($header)) {
            $this->blogView->setBlogStatusMessage($type,1);

            if ($this->blogModel->isBlogTextToShort($text)) {
                 $this->blogView->setBlogStatusMessage($type, 2);
            }

            if ($this->blogModel->isBlogTextToLong($text)) {
                $this->blogView->setBlogStatusMessage($type, 3);
            }
        } else if ($this->blogModel->isBlogTextToShort($text)) {
            $this->blogView->setBlogStatusMessage($type, 4);
        } else if ($this->blogModel->isBlogTextToLong($text)) {
            $this->blogView->setBlogStatusMessage($type, 5);
        } else if ($this->blogModel->hasBlogTextInvalidChars($text)) {
            $this->blogView->setBlogStatusMessage($type, 6);
            $text= strip_tags($text);                                   //<-strip_tags() inbyggd metod som plockar bort ex html tagar i användarnamn fältet i formuläret
        } else {
            $isBlogOk = true;
        }

        if ($type==$this->blogModel->applicationModel->m_newType) {
             $this->blogView->setNewBlogPostInput($header, $text);
        } else if ($type==$this->blogModel->applicationModel->m_updateType) {
            $this->blogView->setUpdatedBlogPost($header, $text);
        }

        return $isBlogOk;
    }


    /**
    * @param string \controller\ApplicationController $id
    * @return array
    *
    * här hämtas en specifik blogpost ut
    */
    public function getBlog($id) {
        $blog = $this->blogModel->returnSpecificBlog($id);
        return $blog;
    }


    /**
    * @param string \controller\ApplicationController $id
    * @return string
    *
    * här hämtas användarnamnet ut på den som skapat blogposten
    */
    public function getBlogPostUser($id) {
        $blog = $this->blogModel->returnSpecificBlog($id);
        return $blog[4];
    }


    /**
    * @return bolean
    *
    * här kollas så att det är den inloggade användaren som försöker editera/ta bort blogposten
    */
    public function checkBlogUser() {
        $blogUser = $this->getBlogPostUser($this->blogView->returnBlogPostId());
        if($blogUser == $this->loginModel->userModel->returnValidUsername()) {
           return true;
        } else {
           return false;
        }
    }


    /**
    * @param string \controller\ApplicationController $id
    *
    * om användaren vill ta bort sin blog post så körs koden nedan
    */
    public function removeBlogPost($id) {
        $this->blogModel->removeBlogFromDatabase($id);
    }


}